home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / misc / BST_SystemDocs.lha / BeastV1 / Templates / C / BST_EmptyClass.c next >
Encoding:
C/C++ Source or Header  |  1996-05-06  |  6.2 KB  |  247 lines

  1. /****h* Beast/BST_EmptyClass.c [1.0] ********
  2. *
  3. *    NAME
  4. *      BST_EmptyClass --
  5. *
  6. *    COPYRIGHT
  7. *      Maverick Software Development
  8. *
  9. *    AUTHOR
  10. *      Jacco van Weert
  11. *
  12. *    CREATION DATE
  13. *      14-Feb-96
  14. *
  15. *    MODIFICATION HISTORY
  16. *
  17. ******************************************
  18. */
  19.  
  20. #include <BEAST:Include/proto/beast.h>
  21. #include <proto/exec.h>
  22. #include <utility/tagitem.h>
  23.  
  24. /**************************
  25.  **** structure definitions
  26.  ****/
  27. #define BST_EmptyCLASS_NAME "BST_EmptyClass" 
  28.  
  29. /***************************
  30.  **** The instance structure
  31.  ****/
  32. struct BST_EmptyInstance
  33. {
  34. #include <BEAST:Instances/BST_System/C/BST_EmptyClass.instance>
  35. };
  36.  
  37. extern struct Library *BeastBase, *SysBase;
  38. extern char             idString[], ClassName[];
  39.  
  40. #ifdef __SAS__
  41. ULONG __asm Init_Class(void);
  42. ULONG __asm Exit_Class(void);
  43. #else
  44. ULONG Init_Class(void);
  45. ULONG Exit_Class(void);
  46. #endif
  47.  
  48.     /**** These methods are defined as example... they are not needed ****/
  49. rfcall (mth_Init,    BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  50. rfcall (mth_Dispose, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  51. rfcall (mth_GetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  52. rfcall (mth_SetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList);
  53.  
  54.     /**** The name of the library ****/
  55. char idString[]  = "BST_EmptyClass  ("__DATE__")\n\r\0";
  56.     /**** The name of the class as defined in my_class.h ****/
  57. char ClassName[] = BST_EmptyCLASS_NAME ;
  58.  
  59. struct BST_Class *BST_EmptyClass;
  60.  
  61.     /**** The SetAttr procedure is used by the OBM_Init and OBM_SetAttr method ****/
  62. ULONG SetAttr( BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList );
  63.  
  64.  
  65. /****** BST_EmptyClass/Init_Class [1.0]
  66. *
  67. *    NAME
  68. *      Init_Class
  69. *
  70. **********************************
  71. */
  72. #ifdef __SAS__
  73. ULONG __asm Init_Class(void)
  74. #else
  75. ULONG Init_Class(void)
  76. #endif
  77. {
  78.   /*******************************************************************
  79.    **** Define class.... use BST_MakeSubClass if there is a superclass
  80.    ****/
  81.   if (BST_EmptyClass = BST_MakeClass( ClassName, sizeof(struct BST_EmptyInstance )))
  82.     {
  83.       CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_Init,    OBM_INIT    );
  84.       CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_Dispose, OBM_DISPOSE );
  85.       CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_GetAttr, OBM_GETATTR );
  86.       CLSS_AddMethod( BST_EmptyClass, (ULONG *)&mth_SetAttr, OBM_SETATTR );
  87.       BST_AddClass(   BST_EmptyClass );
  88.     }
  89.  
  90.   return( 0 );
  91. }
  92.  
  93. /****** BST_EmptyClass/Exit_Class [1.0]
  94. *
  95. *    NAME
  96. *      Exit_Class
  97. *
  98. ***********************************
  99. */
  100. #ifdef __SAS__
  101. ULONG __asm Exit_Class(void)
  102. #else
  103. ULONG Exit_Class(void)
  104. #endif
  105. {
  106.   BST_RemoveClass( BST_EmptyClass );
  107.   BST_FreeClass(   BST_EmptyClass );
  108.   return( 0 );
  109. }
  110.  
  111. /****** BST_EmptyClass/SetAttr [1.0]
  112. *
  113. *    NAME
  114. *      SetAttr
  115. *
  116. ********************************************
  117. */
  118. ULONG SetAttr( BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList )
  119. {
  120.   struct BST_EmptyInstance *EI = Macro_GetInstance;
  121.   struct TagItem        *cur_ti, 
  122.                  *numberof_ti = NULL;
  123.   ULONG              the_tag,
  124.                   nr_attr = 0xFFFFFFFF;
  125.  
  126.   /*******************************
  127.    **** Check for the BTA_NumberOf
  128.    ****/
  129.   if (numberof_ti = BST_FindTagItem( BTA_NumberOf, TagList ))
  130.       {    nr_attr = numberof_ti->ti_Data; }
  131.  
  132.  
  133.   /************************
  134.    **** Set every attribute
  135.    ****/
  136.   for (cur_ti = TagList; ( cur_ti->ti_Tag != TAG_DONE ) &&
  137.                ( nr_attr >  0  )       ; cur_ti = BST_NextTagItem( cur_ti ))
  138.     {
  139.       the_tag         = cur_ti->ti_Tag;
  140.       cur_ti->ti_Tag ^= BTF_Ignore;
  141.       nr_attr--;
  142.       switch( the_tag )
  143.         {
  144.       case BTA_Title: EI->Title = (char *)cur_ti->ti_Data;  break;
  145.           default     : nr_attr++;
  146.                     cur_ti->ti_Tag  ^= BTF_Ignore; break;
  147.         }
  148.     }
  149.  
  150.   /****************************************************
  151.    **** Reset the MethodFlags if all attributes are set
  152.    ****/
  153.   if (  numberof_ti )
  154.     if (!(numberof_ti->ti_Data = nr_attr))
  155.     MethodFlags &= ~( MTHF_DOPARENTS | MTHF_DOCHILDREN | MTHF_PASSTOCHILD );
  156.  
  157.   return( MethodFlags );
  158. }
  159.  
  160. /****** BST_EmptyClass/mth_Init [1.0]
  161. *
  162. *    NAME
  163. *      mth_Init
  164. *
  165. **************************************************
  166. */
  167. rfcall (mth_Init, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  168. {
  169.   return SetAttr( MethodFlags, Object, TagList );
  170. }
  171.  
  172. /****** BST_EmptyClass/mth_Dispose [1.0]
  173. *
  174. *    NAME
  175. *      mth_Dispose
  176. *
  177. *****************************************************
  178. */
  179. rfcall (mth_Dispose, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  180. {
  181.   return MethodFlags;
  182. }
  183.  
  184.  
  185. /****** BST_EmptyClass/mth_SetAttr [1.0]
  186. *
  187. *    NAME
  188. *      mth_SetAttr
  189. *
  190. *****************************************************
  191. */
  192. rfcall (mth_SetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  193. {
  194.   return SetAttr( MethodFlags, Object, TagList );
  195. }
  196.  
  197.  
  198. /****** BST_EmptyClass/mth_GetAttr [1.0]
  199. *
  200. *    NAME
  201. *      mth_GetAttr( MethodFlags, Object, Taglist )
  202. *
  203. *****************************************************
  204. */
  205. rfcall( mth_GetAttr, BST_MethodFlags MethodFlags, struct BST_Object *Object, struct TagItem *TagList)
  206. {
  207.   struct BST_EmptyInstance *EI = Macro_GetInstance;
  208.   struct TagItem        *cur_ti, 
  209.                  *numberof_ti = NULL;
  210.   ULONG              the_tag,
  211.                   nr_attr = 0xFFFFFFFF;
  212.  
  213.   /*******************************
  214.    **** Check for the BTA_NumberOf
  215.    ****/
  216.   if (numberof_ti = BST_FindTagItem( BTA_NumberOf, TagList ))
  217.       {    nr_attr = numberof_ti->ti_Data; }
  218.  
  219.  
  220.   /************************
  221.    **** Get every attribute
  222.    ****/
  223.   for (cur_ti = TagList; ( cur_ti->ti_Tag != TAG_DONE ) &&
  224.                ( nr_attr >  0  )       ; cur_ti = BST_NextTagItem( cur_ti ))
  225.     {
  226.       the_tag         = cur_ti->ti_Tag;
  227.       cur_ti->ti_Tag ^= BTF_Ignore;
  228.       nr_attr--;
  229.       switch( the_tag )
  230.         {
  231.       case BTA_Title: cur_ti->ti_Data = EI->Title;  break;
  232.           default     : nr_attr++;
  233.                     cur_ti->ti_Tag  ^= BTF_Ignore; break;
  234.         }
  235.     }
  236.  
  237.   /****************************************************
  238.    **** Reset the MethodFlags if all attributes are set
  239.    ****/
  240.   if (    numberof_ti )
  241.     if (!(numberof_ti->ti_Data = nr_attr))
  242.     MethodFlags &= ~( MTHF_DOPARENTS | MTHF_DOCHILDREN | MTHF_PASSTOCHILD );
  243.  
  244.   return( MethodFlags );
  245.  
  246. }
  247.